Many companies and other organizations operate computer networks that interconnect numerous computing systems to support their operations, such as with the computing systems being co-located (e.g., as part of a local network) or instead located in multiple distinct geographical locations (e.g., connected via one or more private and/or public intermediate networks). For example, data centers housing significant numbers of interconnected computing systems have become commonplace, such as private data centers that are operated by and on behalf of a single organization, and public data centers that are operated by entities as businesses to provide computing resources to customers or clients. Some public data center operators provide network access, power, and secure installation facilities for computing hardware owned by various clients, while other public data center operators provide “full service” facilities that also include hardware resources made available for use by their clients. However, as the scale and scope of typical data centers has increased, the tasks of provisioning, administering, and managing the physical computing resources have become increasingly complicated.
The advent of virtualization technologies for commodity hardware has provided benefits with respect to managing large-scale computing resources for many clients with diverse needs, allowing various computing resources to be efficiently and securely shared by multiple clients, as well as facilitating the provisioning, management, and movement of computing resources among a set of physical nodes. For example, virtualization technologies may allow a single physical computing machine to be shared among multiple users by providing each user with one or more virtual machines hosted by the single physical computing machine, with each such virtual machine being a software simulation acting as a distinct logical computing system that provides users with the illusion that they are the sole operators and administrators of a given hardware computing resource, while also providing application isolation and security among the various virtual machines. Furthermore, some virtualization technologies are capable of providing virtual resources that span two or more physical resources, such as a single virtual machine with multiple virtual processors that spans multiple distinct physical computing systems. As another example, virtualization technologies may allow data storage hardware to be shared among multiple users by providing each user with a virtualized data store which may be distributed across multiple data storage devices, with each such virtualized data store acting as a distinct logical data store that provides users with the illusion that they are the sole operators and administrators of the data storage resource. As another example, a virtualized operating system can more easily be moved between physical nodes, either by stopping and starting, or even while running by copying memory pages over the network followed by a final snapshot and rerouting of network traffic using a process sometimes known as “live migration.”
Altogether these trends have led to the advent of large-scale, “utility-style” (pay as you go) computing environments for multiple customers or “tenants” that, on the one hand, share resources from a large common pool of computing and storage resources while, on the other hand, having their tenant-specific resources act in a logically isolated fashion that maintains their privacy and security. Such systems are known as multi-tenanted cloud computing environments or “public clouds.” In this usage, the term “public” does not mean that tenant usage is not isolated and secure. Instead, it means that members of the public may access logically isolated resources in the public clouds, and in at least some cases pay for what they use, for example on a per hour, per gigabyte, or per month basis.